package com.wfs.myapp.service.impl;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class BackgroundWithImageTextDemo {

    public static void main(String[] args) throws IOException {

        String groupName = "全员饿人(8)";    // 群名

        BufferedImage leftImage = ImageIO.read(new File("D:\\FU.png"));
        String leftUserName = "娱乐至上";
        String user1Content = "太假了  一眼假";   // 内容（入参）

        BufferedImage rightImage = ImageIO.read(new File("D:\\me.png"));
        String user2Content = "哪里能看出来，字体?";   // 内容（入参）

        // 图像尺寸
        int width = 800;
        int height = 600;

        // 创建BufferedImage对象
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        // 获取Graphics2D对象
        Graphics2D g2d = image.createGraphics();

        // 设置背景色为RGB(245,245,245)
        g2d.setColor(new Color(245, 245, 245));
        g2d.fillRect(0, 0, width, height);

        // 启用抗锯齿
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        try {
            // 加载图片（请替换为实际图片路径）
            BufferedImage header = ImageIO.read(new File("D:\\header.png"));

            // 在(50,50)位置绘制图片，缩放为200x200
            if (header != null) {
                g2d.drawImage(header, 0, 0, 800, 60, null);
            } else {
                System.out.println("无法加载图片，将只绘制文字");
            }
        } catch (IOException e) {
            System.out.println("图片加载失败: " + e.getMessage());
        }

        // 设置文字颜色和字体
        g2d.setColor(Color.BLACK);
        Font font = new Font("微软雅黑", Font.PLAIN, 18);
        g2d.setFont(font);

        // 在(300, 200)位置绘制文字
        g2d.drawString(groupName, 25, 35);

        /** 聊天内容 左侧1 **/
        // 头像
        g2d.drawImage(leftImage, 35, 100, 35, 35, null);
        // 名称
        Font userNameFont = new Font("微软雅黑", Font.PLAIN, 12);
        g2d.setFont(userNameFont);
        g2d.setColor(new Color(178, 178, 178));
        g2d.drawString(leftUserName, 75, 108);
        // 内容
        g2d.drawImage(ImageIO.read(new File("D:\\content_pre.png")), 72, 115, 14, 36, null);    // 聊天内容背景前置（小尖尖）
        Font contentFont = new Font("微软雅黑", Font.PLAIN, 14);    // 聊天内容字体
        g2d.setFont(contentFont);
        FontMetrics fm = g2d.getFontMetrics();
        // 计算文字区域
        int textWidth = fm.stringWidth(user1Content);
        int textHeight = fm.getHeight();
        // 圆角参数
        int arcWidth = 10;  // 圆角水平半径
        int arcHeight = 6; // 圆角垂直半径
        // 设置背景色和位置
        int x = 87;
        int y = 138;
        Color bgColor = Color.WHITE;
        // 填充背景矩形（可调整边距）
        int padding = 9;
        g2d.setColor(bgColor);

        // 绘制圆角矩形背景
        g2d.fillRoundRect(
                x - padding,
                y - textHeight + fm.getDescent() - padding,
                textWidth + 2 * padding,
                textHeight + 2 * padding,
                arcWidth,
                arcHeight
        );
        // 绘制文字（覆盖在背景上）
        g2d.setColor(Color.BLACK); // 文字颜色
        g2d.drawString(user1Content, x, y);

        /** 聊天内容 右侧1 **/
        // 头像
        g2d.drawImage(rightImage, 740, 165, 35, 35, null);
        // 名称（不显示自己）
        g2d.drawImage(ImageIO.read(new File("D:\\content_pre2.png")), 720, 165, 14, 36, null);    // 聊天内容背景前置（小尖尖）

        // 计算文字区域
        int textWidth2 = fm.stringWidth(user2Content);
        int textHeight2 = fm.getHeight();
        // 设置背景色和位置
        // 内容  （800 - 右边距到内容的固定长度 -（x要根据文字长度 *16像素））
        int user2_x = width - 55 - (user2Content.length() * 16);
        int user2_y = 188;
        g2d.setColor(new Color(149, 236, 105));

        // 绘制圆角矩形背景
        g2d.fillRoundRect(
                user2_x - padding,
                user2_y - textHeight2 + fm.getDescent() - padding,
                textWidth2 + 2 * padding,
                textHeight2 + 2 * padding,
                arcWidth,
                arcHeight
        );
        // 绘制文字（覆盖在背景上）
        g2d.setColor(Color.BLACK); // 文字颜色
        g2d.drawString(user2Content, user2_x, user2_y);

        // 释放Graphics2D资源
        g2d.dispose();

        try {
            // 保存图像到D盘根目录
            File output = new File("D:/graphics_example.png");
            ImageIO.write(image, "png", output);
            System.out.println("图像已成功保存到: " + output.getAbsolutePath());
        } catch (IOException e) {
            System.out.println("保存图像时出错: " + e.getMessage());
        }
    }
}

